import axios from 'axios';
import { ElMessage } from "element-plus";
// 引入管理员和学生相关的仓库
import useAdminStore from '@/store/modules/admin';
import useStudentStore from '@/store/modules/student';


import { useRouter } from 'vue-router'; // 引入 Vue Router
const $router = useRouter(); // 获取路由实例
// 利用axios对象的create方法，创建axios实例
const request = axios.create({
  // 基础路径
  baseURL: import.meta.env.VITE_APP_BASE_API, // 基础路径会携带api
  timeout: 10000 // 超时的时间设置
});

// 请求拦截器
request.interceptors.request.use((config) => {
  // 定义哪些路径需要管理员token，哪些路径需要学生token
  const adminPaths = ['/class/page', '/admin/update']; // 管理员专属路径
  const studentPaths = ['/student/create-group', 'student/get-individual-pro', '/student/update']; // 学生专属路径
  console.log("1111111111111111111111")
  if (config.url != undefined) {
    // 根据路径判断需要哪种类型的token
    console.log("1211111111111111111")
    if (adminPaths.some(path => config.url!.includes(path))) {
      // 获取管理员小仓库的token
      const adminStore = useAdminStore();
      console.log(adminStore.token);

      if (adminStore.token) {
        config.headers['Authorization'] = `Bearer ${adminStore.token}`;
      } else {
        console.warn('Admin token not found for path:', config.url);
        ElMessage.error('未登录，请先登录');
        $router.push('/login'); // 跳转到登录页面
        return Promise.reject(new Error('Admin token not found'));
      }
    }
    else if (studentPaths.some(path => config.url!.includes(path))) {
      // 获取学生小仓库的token
      const studentStore = useStudentStore();

      console.log(studentStore.token);
      if (studentStore.token) {
        config.headers['Authorization'] = `Bearer ${studentStore.token}`;
      } else {
        console.warn('Student token not found for path:', config.url);
        ElMessage.error('未登录，请先登录');
        $router.push('/login'); // 跳转到登录页面
        return Promise.reject(new Error('Student token not found'));
      }
    }
  }


  // 返回配置对象
  return config;
}, error => {
  // 请求错误处理
  return Promise.reject(error);
});

request.interceptors.response.use(response => {
  // 检查响应头中的 Content-Type
  const contentType = response.headers['content-type'];

  // 如果响应类型是 application/json，则简化数据，仅返回 data 部分
  if (contentType && contentType.includes('application/json')) {
    return response.data;
  } else {
    // 对于非JSON响应（如文件上传、下载等），直接返回整个 response 对象
    return response;
  }
}, error => {
  // 错误回调
  let message = '网络出现问题';
  const status = error.response?.status;

  switch (status) {
    case 401:
      message = "TOKEN过期";
      break;
    case 403:
      message = "无权访问";
      break;
    case 404:
      message = "请求地址错误";
      break;
    case 500:
      message = "服务器出现问题";
      break;
    default:
      message = "网络出现问题";
  }

  // 提示错误信息
  ElMessage({
    type: 'error',
    message: message
  });

  return Promise.reject(error);
});

// 对外暴露
export default request;